//题目背景
//高精度乘法模板题。
//
//题目描述
//给出两个非负整数，求它们的乘积。
//
//输入格式
//输入共两行，每行一个非负整数。
//
//输出格式
//输出一个非负整数表示乘积。

#include<iostream>
#include<vector>
using namespace std;
vector<int> mul(vector<int> &A, int b)  //高精度乘法
{
	vector<int> C;
	int t = 0;
	for(size_t i = 0; i < A.size() || t; i++){
		if(i < A.size()) t += A[i] * b;
		C.push_back(t % 10);
		t /= 10;
	}
	return C;
}
vector<int> add(vector<int> &A, vector<int> &B)  //高精度加法
{
	vector<int> C;
	int t = 0;
	for(size_t i = 0; i < A.size() || i < B.size(); i++){
		if(i < A.size()) t += A[i];
		if(i < B.size()) t += B[i];
		C.push_back(t % 10);
		t /= 10;
	}
	if(t) C.push_back(1);
	return C;
}
vector<int> solve(vector<int> &A, vector<int> &B)
{
	vector<int> C;
	//遍历 B 的每一位（从低位到高位）
	for(size_t i = 0; i < B.size(); i++){
		//计算A与当前位的乘积
		vector<int> D = mul(A, B[i]);
		//移位处理：在结果后添加i个0
		//因为存储是逆序的,所以先添加尾部的0，再添加逆序的数字
		vector<int> temp(i, 0); // 创建 i 个前导零（逆序存储时零在低位）
		temp.insert(temp.end(), D.begin(), D.end()); // 拼接乘积结果
		D = temp;  // 完成移位,相当于 D × 10^i
		C = add(C, D);
	}
	//逆序存储，从结果尾部删除前导0
	while(C.size() > 1 && C.back() == 0) C.pop_back(); 
	return C;
}
int main()
{
	string a, b;
	vector<int> A, B;
	cin >> a >> b;
	for(int i = a.size() - 1; i >= 0; i--)
		A.push_back(a[i] - '0');
	for(int i = b.size() - 1; i >= 0; i--)
		B.push_back(b[i] - '0');
	auto C = solve(A, B);
	for(int i = C.size() - 1; i >= 0; i--)
		printf("%d", C[i]);
	return 0;
}
